package pers.vic.war.common.configuration;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import lombok.extern.slf4j.Slf4j;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@PropertySource("classpath:commonwar-config.properties")
@EnableWebMvc //// 启用Mvc，非springboot框架需要引入注解@EnableWebMvc
@EnableSwagger2 // 启用Swagger2
@Slf4j
public class ConfigurationOfCommonwar {

    public static Logger log = LoggerFactory.getLogger(ConfigurationOfCommonwar.class);

    /* ****************************Swagger2 ↓************************************** */
    // http://localhost:port/项目名/swagger-ui.html

    // @Bean
    public Docket test1Api() {
        log.debug("Swagger2 test1Api  debug message");
        return new Docket(DocumentationType.SWAGGER_2).groupName("项目一").apiInfo(apiInfo()).select()
            .apis(RequestHandlerSelectors.basePackage("pers.vic.test")).paths(PathSelectors.any()).build();
    }

    // @Bean
    public Docket test2Api() {
        log.debug("Swagger2 test2Api  debug message");
        return new Docket(DocumentationType.SWAGGER_2).groupName("项目二").apiInfo(apiInfo()).select()
            .apis(RequestHandlerSelectors.basePackage("pers.vic.system")).paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("测试title").description("测试...........").termsOfServiceUrl("http://......com")
            .contact(new Contact("临窗旋墨 ", "http://xuqiudong.cc", "xuduochoua@163.com")).version("1.0").build();
    }
    /* ****************************Swagger2 ↑************************************** */

}

/**
 * <a href="https://blog.52itstyle.vip/archives/1473/">swagger2使用说明</a>
 * <a HREF="https://www.jianshu.com/p/67c9b84226cd">swagger2使用说明</a>
 * 
 * @Api：用在类上，说明该类的作用
 * @ApiOperation：用在方法上，说明方法的作用
 * @ApiIgnore：使用该注解忽略这个API
 * @ApiImplicitParams：用在方法上包含一组参数说明
 * @ApiImplicitParam：用在@ApiImplicitParams注解中，指定一个请求参数的各个方面 paramType：参数放在哪个地方 header-->请求参数的获取：@RequestHeader
 *                                                         query-->请求参数的获取：@RequestParam
 *                                                         path（用于restful接口）-->请求参数的获取：@PathVariable body（不常用） form（不常用）
 *                                                         name：参数名 dataType：参数类型 required：参数是否必须传 value：参数的意思
 *                                                         defaultValue：参数的默认值
 * @ApiResponses：用于表示一组响应
 * @ApiResponse：用在@ApiResponses中，一般用于表达一个错误的响应信息 code：数字，例如400 message：信息，例如"请求参数没填好" response：抛出异常的类
 * @ApiModel：描述一个Model的信息（这种一般用在post创建的时候，使用@RequestBody这样的场景，请求参数无法使用@ApiImplicitParam注解进行描述的时候） @ApiModelProperty：描述一个model的属性
 */
